package com.hb.trade.client.center;

import com.hb.core.pojo.UserConfig;
import com.hb.core.pojo.center.au.dto.*;
import com.hb.core.pojo.center.au.entity.Org;
import com.hb.core.pojo.center.au.entity.OrgCollection;
import com.hb.core.pojo.center.au.entity.User;
import com.hb.core.pojo.parent.PageResult;
import org.fzzn.core.model.msg.Message;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.Serializable;
import java.util.List;

/**
 * 企业信息服务接口
 *
 * @author zhaojk
 */
@FeignClient("hb-center")
public interface OrgClient {
    /**
     * 获取指定用户所在的企业信息
     *
     * @param username 参数支持的业务数据类型: 企业ID, 用户ID, 登录用户名
     * @return
     */
    @PostMapping("/org/getOrgByUsername")
    Message<OrgDTO> getOrgByUsername(@RequestParam("username") Serializable username);

    /**
     * 企业列表信息
     *
     * @param orgDTO
     * @return
     */
    @PostMapping("/org/pageOrgs")
    Message<PageResult<OrgDTO>> pageOrgs(OrgDTO orgDTO);

    /**
     * @param orgDTO:
     * @Description: 完善企业信息
     * @Author: zhongdl
     * @Date:2022/1/15 14:50
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/org/perfectInformation")
    Message<Boolean> perfectInformation(@RequestBody OrgDTO orgDTO);

    /**
     * @param orgId:
     * @Description: 根据id查询企业信息
     * @Author: zhongdl
     * @Date:2022/1/15 15:29
     * @return: {@link Message< OrgDTO> }
     **/
    @PostMapping("/org/getOrgById")
    Message<OrgDTO> getOrgById(@RequestParam Long orgId);

    /**
     * 查询指定用户所在的企业以及子公司列表
     * 超级管理员将返回全部企业数据
     *
     * @param user
     * @return
     */
    @PostMapping("/org/listByUserInfo")
    Message<List<OrgDTO>> listByUserInfo(User user);

    /**
     * @param orgId:
     * @Description: 查询当前企业的父企业和子企业
     * @Author: zhongdl
     * @Date:2022/1/20 8:59
     * @return: {@link Message< OrgDTO> }
     * @deprecated 方法局限性太大
     **/
    @Deprecated
    @PostMapping("/org/listParentAndSon")
    Message<List<OrgDTO>> listParentAndSon(@RequestParam Long orgId);

    /**
     * @param orgId:
     * @Description: 查询当前企业的父企业(不包含自己)
     * @Author: zhongdl
     * @Date:2022/1/20 8:59
     * @return: {@link Message< OrgDTO> }
     **/
    @PostMapping("/org/listParent")
    Message<List<OrgDTO>> listParent(@RequestParam Long orgId);

    /**
     * @param orgId:
     * @Description: 查询当前子企业(包含自己)
     * @Author: zhongdl
     * @Date:2022/1/20 8:59
     * @return: {@link Message< OrgDTO> }
     **/
    @PostMapping("/org/listSon")
    Message<List<OrgDTO>> listSon(@RequestParam Long orgId);


    /**
     * @param orgCollection:
     * @Description: 保存收款方信息
     * @Author: zhongdl
     * @Date:2022/1/15 17:08
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgCollection/saveOrgCollection")
    Message<Boolean> saveOrgCollection(@RequestBody OrgCollectionDTO orgCollection);

    /**
     * @param orgCollection:
     * @Description: 查询收款码列表
     * @Author: zhongdl
     * @Date:2022/1/17 9:44
     * @return: {@link Message< List< OrgCollection>> }
     **/
    @PostMapping("/orgCollection/listOrgCollection")
    Message<List<OrgCollection>> listOrgCollection(@RequestBody OrgCollectionDTO orgCollection);


    /**
     * @param orgCollection:
     * @Description: 根据id查询收款码详情
     * @Author: zhongdl
     * @Date:2022/1/17 14:16
     * @return: {@link Message< OrgCollection> }
     **/
    @PostMapping("/orgCollection/getOrgCollectionId")
    Message<OrgCollection> getOrgCollectionId(@RequestBody OrgCollectionDTO orgCollection);

    /**
     * @param orgCollection:
     * @Description: 根据id删除收款方
     * @Author: zhongdl
     * @Date:2022/2/10 17:08
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgCollection/removeOrgCollectionId")
    Message<Boolean> removeOrgCollectionId(@RequestBody OrgCollectionDTO orgCollection);

    /**
     * @param orgId:
     * @param payee:
     * @Description: 根据企业id和收款方 查询企业的收款信息
     * @Author: zhongdl
     * @Date:2022/2/7 14:15
     * @return: {@link Message< OrgCollection> }
     **/
    @PostMapping("/orgCollection/getOrgCollectionOrgIdAndPayee")
    Message<OrgCollection> getOrgCollectionOrgIdAndPayee(@RequestParam Long orgId, @RequestParam String payee);

    /**
     * 查询指定企业的供应商库
     *
     * @param org#id      企业ID
     * @param org#orgName 企业名称, 查询条件
     * @author zhaojk
     */
    @PostMapping("/org/tender/history")
    Message<PageResult<OrgDTO>> tenderHistory(OrgDTO org);

    /**
     * 保存供应商信息至供应商库
     *
     * @param bidOrgId  招标人企业ID
     * @param tendOrgId 投标人企业ID
     * @author zhaojk
     */
    @PostMapping("/org/tender/saveSupply")
    Message<Boolean> tenderSaveSupply(@RequestParam Long bidOrgId, @RequestParam Long tendOrgId);

    /**
     * @param orgDTO:
     * @Description: 保存企业
     * @Author: zhongdl
     * @Date:2022/2/11 10:59
     * @return: {@link Message< OrgDTO> }
     **/
    @PostMapping("/org/saveOrg")
    Message<OrgDTO> saveOrg(@RequestBody OrgDTO orgDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 新增一个收款方
     * @Author: zhongdl
     * @Date:2022/2/14 9:24
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgPayee/newOrgPayee")
    Message<Long> newOrgPayee(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 更新收款方信息
     * @Author: zhongdl
     * @Date:2022/2/14 10:31
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgPayee/updateOrgPayee")
    Message<Boolean> updateOrgPayee(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 查询收款方列表接口
     * @Author: zhongdl
     * @Date:2022/2/14 10:37
     * @return: {@link Message< List< OrgCollection>> }
     **/
    @PostMapping("/orgPayee/listOrgPayee")
    Message<List<OrgPayeeDTO>> listOrgPayee(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 查询收款方列表接口（分页）
     * @Author: zhongdl
     * @Date:2022/2/14 10:37
     * @return: {@link Message< List< OrgCollection>> }
     **/
    @PostMapping("/orgPayee/pageOrgPayee")
    Message<PageResult> pageOrgPayee(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 查询收款方详情
     * @Author: zhongdl
     * @Date:2022/2/14 10:51
     * @return: {@link Message< OrgPayeeDTO> }
     **/
    @PostMapping("/orgPayee/getOrgPayeeId")
    Message<OrgPayeeDTO> getOrgOrgPayeeId(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     * @param orgPayeeDTO:
     * @Description: 根据id删除收款方
     * @Author: zhongdl
     * @Date:2022/2/14 10:59
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgPayee/removeOrgPayeeId")
    Message<Boolean> removeOrgPayeeId(@RequestBody OrgPayeeDTO orgPayeeDTO);

    /**
     *
     * @Description:校验收款方式是否被关联
     * @Author: zhongdl
     * @Date:2022/5/30 11:43
     * @param orgCollectionDTO:
     * @return: {@link Message< Boolean> }
     **/
    @PostMapping("/orgCollection/correlatedFlag")
    Message<Boolean> correlatedFlag(@RequestBody OrgCollectionDTO orgCollectionDTO);

    @PostMapping("/org/orgConfirm")
    Message orgConfirm(@RequestBody OrgDTO orgDTO);

    @PostMapping("/org/getOrgByOrgName")
    Message<Org> getOrgByOrgName(@RequestBody String orgName);

    /* ********************* 企业专属信息配置接口 start ********************* */

    /**
     * 更新企业专属配置信息
     *
     * @param configDTO
     * @return
     */
    @PostMapping("/orgCustomConfig/updateConfig")
    Message<Boolean> updateConfig(OrgCustomConfigDTO configDTO);

    /**
     * 查询企业专属配置信息
     *
     * @param configDTO
     * @return
     */
    @PostMapping("/orgCustomConfig/settingInfo")
    Message<OrgCustomConfigDTO> settingInfo(OrgCustomConfigDTO configDTO);

    /**
     * 企业专属配置审核列表
     *
     * @param configDTO
     * @return
     */
    @PostMapping("/orgCustomConfig/auditList")
    Message<PageResult<OrgCustomConfigDTO>> auditList(OrgCustomConfigQueryDTO configDTO);

    /**
     * 审核通过/拒绝
     *
     * @param configDTO
     * @return
     */
    @PostMapping("/orgCustomConfig/audit")
    Message<Boolean> audit(OrgCustomConfigAuditDTO configDTO);

    /**
     * 查看驳回信息
     *
     * @param configDTO
     * @return
     */
    @PostMapping("/orgCustomConfig/rejectInfo")
    Message<String> rejectInfo(OrgCustomConfigAuditDTO configDTO);

    /**
     * 根据signKey获取当前企业的自定义信息
     *
     * @param signKey
     * @return
     */
    @GetMapping("/orgCustomConfig/displayConfigInfo")
    Message<OrgCustomConfigDTO> displayConfigInfo(@RequestParam Integer signKey);

    /**
     * 删除企业
     *
     * @param orgDTO
     * @return
     */
    @PostMapping("/org/removeOrgById")
    Message<Boolean> removeOrgById(OrgDTO orgDTO);

    /**
     * 获取指定企业下的分公司管理员
     *
     * @param orgId
     * @param userId 修改时判断排除当前用户
     * @return
     */
    @PostMapping("/org/getBranchManager")
    Message<List<UserDTO>> getBranchManager(@RequestParam Long orgId, @RequestParam Long userId);

    /**
     * 查询总公司
     *
     * @param orgId
     * @return
     */
    @PostMapping("/org/getHeadOffice")
    Message<OrgDTO> getHeadOffice(@RequestBody Long orgId);

    /**
     * 总公司在授予分公司权限后的处理操作
     * 当授予"分公司权限"时, 给总公司添加"分公司管理员"的角色
     * 当取消"分公司权限"时, 给总公司移除"分公司管理员"的角色, 但是已经创建了分公司的企业, 不能移除
     *
     * @param orgId
     * @param userConfig
     * @param roleSign   业务角色标识
     * @return
     */
    @PostMapping("/org/handleBranchManager")
    Message<Boolean> handleBranchManager(@RequestParam Long orgId, @RequestBody UserConfig userConfig, @RequestParam Integer roleSign);

    /* ********************** 企业专属信息配置接口 end ********************** */

    @PostMapping("/org/checkOrgMsgByZapp")
    Message<Boolean> checkOrgMsgByZapp(@RequestBody OrgDTO orgDTO);
}
